package com.archtecture.view.beans;

import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

import javax.ejb.SessionContext;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.jboss.resteasy.spi.HttpRequest;
import org.primefaces.context.RequestContext;

import com.archtecture.control.models.Usuario;
import com.archtecture.view.utils.UtilControl;
import com.archtecture.view.utils.UtilLog;
import com.archtecture.view.utils.UtilSession;
import com.archtecture.view.utils.UtilWeb;

@ManagedBean(name = "aplicationSessionMB")
@SessionScoped
public class AplicationSessionMB {

	private boolean	valorVisivel	= false;

	private boolean	popAtivo		= false;

	private String	navigation;

	public String getNavigation() {
		return navigation;
	}

	public Usuario getUsuarioSessao() {
		try {
			return UtilWeb.obterUsuarioLogado();
		} catch (Exception e) {
			UtilLog.logar(e.getMessage());
			return null;
		}
	}

	public boolean isPopAtivo() {
		return popAtivo;
	}

	public boolean isValorVisivel() {
		return valorVisivel;
	}

	public String getRemainingTimeSession(){
//		HttpSession sessao = ((HttpSession)((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getSession());
		
		HttpSession sessao =((HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false)); 
		
//		System.out.println(FacesContext.getCurrentInstance().getExternalContext().getApplicationMap()); ;
		
		Integer horaCriacaoSessao = (int) sessao.getCreationTime();
		Integer horaUltimoAcesso = (int) sessao.getLastAccessedTime();
		Integer tempoMaximoInatividade = sessao.getMaxInactiveInterval() * 60;
		
		Integer tempoInatividade = horaUltimoAcesso - horaCriacaoSessao;
//		System.out.println("tempoInatividade = " + new Date(horaUltimoAcesso) + " - " + new Date(horaCriacaoSessao) + " = " + tempoInatividade);
		
		Integer tempoFaltaExpiracao = tempoMaximoInatividade - tempoInatividade;
//		System.out.println(tempoInatividade +" - "+tempoMaximoInatividade+" - "+ horaCriacaoSessao+" = "+ tempoFaltaExpiracao);
		
		GregorianCalendar gc = new GregorianCalendar(new Locale("pt_BR"));
		gc.setTimeInMillis(tempoFaltaExpiracao);
		
		return  String.valueOf(new Date(gc.getTimeInMillis()));
	}
	
	public String logout() {
		setValorVisivel(false);
		UtilSession.limparSessao();
		// UtilControl.realizarBackupMySQL();
		return "/sistema/home/login?faces-redirect=true";
	}

	public void setNavigation(String navigation) {
		this.navigation = navigation;
	}

	public void setPopAtivo(boolean popAtivo) {
		this.popAtivo = popAtivo;
	}

	public void setValorVisivel(boolean valorVisivel) {
		this.valorVisivel = valorVisivel;
	}

	public void visualizarValores() {
		setValorVisivel(!isValorVisivel());
	}

}
